import java.util.Arrays;

public class FoodManager {
    //定义一个储存食品的仓库
    private Food[] arr={};

    //设置数组的默认初始长度
    private  int  initial=5;

    public FoodManager(){
        //开始存入默认值

        Food f1 = new Food("牛肉干",12,5);
        Food f2 = new Food("果冻 ",4,7);
        Food f3 = new Food("豆腐干",2,2);
        this.add(f1);
        this.add(f2);
        this.add(f3);

    }

    //食品数量
    private int size;

    //1.添加食品
    public boolean add(Food food){
        for (int i=0;i<size;i++){
            //判断新存入食品是否和之前存入的食品相同
            if (food.getName().equals(arr[i].getName())){
                //替换掉之前的食品价格
                arr[i].setPrice(food.getPrice());
                //叠加食品的库存
                arr[i].setInventory(food.getInventory()+arr[i].getInventory());
                return true;
            }

        }

        if (size+1>arr.length){
            int min=Math.min(size,initial);//判断2者之间最小值
            int replace;
            if (min<initial){//如果数组长度小于默认长度
                replace=initial;//折扩容到默认长度
            }else{
                replace=size+(size/2);//否则扩容二分之一倍
            }

            Food[]  newar=new Food[replace];
            System.arraycopy(this.arr,0,newar,0,size);//将原数组值复制到新数组
            this.arr=newar;//再将新数组的内存地址给原数组
        }
        arr[size++]=food;//将输入的食品存入数组
        return true;
    }

    //2.根据名字查找食品
    public Food[] findByName(String name){
        Food[] foods=new Food[1];
        //循环遍历查找需要的食品信息
            for (int i=0;i<size;i++){
                Food food=arr[i];
                //判断是否与传入的名字相同
                if (food.getName().equals(name)){
                    //如果相同 则传入新数组
                    foods[0]=food;
                }
            }
        return foods;
    }

    //3.查询所有食品
    public Food[] findAll(){
        //定义一个新数组
        Food[] foods=new Food[size];
        //把当前数组复制到新苏州
        System.arraycopy(this.arr,0,foods,0,size);
        return foods;
    }

    //4.根据食品名称，修改食品信息
    public boolean updateByname(String name){
        for (int i=0;i<size;i++){
            //循环遍历  看是否有这个食品存在
            if (arr[i].getName().equals(name)){
                return true;
            }
        }
          return false;
    }

    //4.根据食品名称，修改食品信息
    public boolean updateByname(String name,double price,int inventory){
        for (int i=0;i<size;i++){
            //循环遍历  看是否有这个食品存在
            if (arr[i].getName().equals(name)){
                arr[i].setPrice(price);//修改价格
                arr[i].setInventory(inventory);//修改库存
                return true;
            }
        }
        return false;
    }

    //5.计算所有食品总价
    public double countPrice(){
        double sum=0;//定义总价
        for (int i=0;i<size;i++){
            sum+=arr[i].getPrice()*arr[i].getInventory();//计算总价
        }
        return sum;
    }

    //6.统计所有食品中最贵的商品信息
    public Food[] maxFood(){
        //通过打擂台的方式求出最贵的价格
         double max=0;
         for (int i=0;i<size;i++){
             if (arr[i].getPrice()>max){//循环遍历求出最贵价格
                 max=arr[i].getPrice();
             }
         }

         int count=0;
         for (int i=0;i<size;i++){
             if (arr[i].getPrice()==max){//循环遍历求出有多少个相同的价格
                 count++;
             }
         }

         Food[] foods=new Food[count];
         int index=0;
        for (int i=0;i<size;i++){
            if (arr[i].getPrice()==max){//循环遍历取出价格最贵的食品
               foods[index++]=arr[i];
            }
        }
        return foods;
    }

    //7.按照食品的价格升序排序输出这些食品的信息
    public Food[] sortFood(){
        Food[] foods= Arrays.copyOf(arr,size);
        for (int i=0;i<foods.length-1;i++){
            for (int j=0;j<foods.length-1-i;j++){
                //冒泡排序判断价格
                if (foods[j].getPrice()>foods[j+1].getPrice()){
                    Food temp=foods[j];
                    foods[j]=foods[j+1];
                    foods[j+1]=temp;
                }
            }
        }
        return foods;
    }
}
